﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace AntikCompta.Data
{
    [XmlRoot("Acheteur")]
    [XmlInclude(typeof(AcheteurParticulier)), XmlInclude(typeof(AcheteurMarchandFr))]
    [XmlInclude(typeof(AcheteurExportEu)), XmlInclude(typeof(AcheteurExportHEu))]
    public abstract class Acheteur
    {
        protected String mNom;
        protected float mTva;

        protected Acheteur()
        {
        }
        
        [XmlIgnore]
        public String Nom
        {
            get { return mNom; }
            set { mNom = value; }
        }

        internal abstract float GetTva(float aPrixAchat, float aPrixVente);

    }
    public class AcheteurParticulier : Acheteur
    {
        public AcheteurParticulier()
        {
            mNom = "Particulier";
            mTva = 19.6F;
        }

        internal override float GetTva(float aPrixAchat, float aPrixVente)
        {
            float res = aPrixVente - aPrixAchat;
            float tva = (mTva / 100);
            if (res <= 0)
                return 0;

            res = res / (1 + tva);
            res *= tva;
            return (float)Math.Round(res,2);
        }
    }

    public class AcheteurMarchandFr : Acheteur
    {
        public AcheteurMarchandFr()
        {
            mNom = "Marchand Fr";
            mTva = 19.6F;
        }

        internal override float GetTva(float aPrixAchat, float aPrixVente)
        {
            float res = aPrixVente;
            float tva = (mTva / 100);
            if (res <= 0)
                return 0;

            res = res / (1 + tva);
            res *= tva;
            return (float)Math.Round(res, 2);
        }
    }

    public class AcheteurExportEu : Acheteur
    {
        public AcheteurExportEu()
        {
            mNom = "Export Eu";
            mTva = 19.6F;
        }

        internal override float GetTva(float aPrixAchat, float aPrixVente)
        {
            return 0;
        }
    }

    public class AcheteurExportHEu : Acheteur
    {
        public AcheteurExportHEu()
        {
            mNom = "Export hors Eu";
            mTva = 19.6F;
        }

        internal override float GetTva(float aPrixAchat, float aPrixVente)
        {
            return 0;
        }
    }
}
